package com.jincheng.system.service;

import com.jincheng.common.core.domain.AjaxResult;
import com.jincheng.system.domain.Tribe;
import com.jincheng.system.domain.dto.*;

import java.util.List;
import java.util.Map;

/**
 * 部落Service接口
 *
 * @author DairyJay
 * @date 2025-02-27
 */
public interface ITribeService {
    /**
     * 查询部落
     *
     * @param tribeId 部落主键
     * @return 部落
     */
    Tribe selectTribeByTribeId(Long tribeId);

    /**
     * 查询部落详情
     *
     * @param tribeId 部落id
     * @return 部落详情
     */
    TribeDetailDTO selectTribeDetail(Long tribeId);


    /**
     * 查询部落列表
     *
     * @param tribe 部落
     * @return 部落集合
     */
    List<Tribe> selectList(Tribe tribe);

    /**
     * 查询部落列表
     *
     * @return 部落集合
     */
    default List<Tribe> selectAll() {
        return selectList(new Tribe());
    }

    /**
     * 查询部落列表
     *
     * @param tribe 部落
     * @return 部落集合
     */
    List<TribeDetailDTO> selectTribeList(Tribe tribe);


    /**
     * 新增部落
     *
     * @param tribe 部落
     * @return 结果
     */
    public int insertTribe(Tribe tribe);

    /**
     * 修改部落
     *
     * @param tribe 部落
     * @return 结果
     */
    public int updateTribe(Tribe tribe);

    /**
     * 批量删除部落
     *
     * @param tribeIds 需要删除的部落主键集合
     * @return 结果
     */
    public int deleteTribeByTribeIds(Long[] tribeIds);

    /**
     * 删除部落信息
     *
     * @param tribeId 部落主键
     * @return 结果
     */
    public int deleteTribeByTribeId(Long tribeId);

    /**
     * 查询组织列表
     *
     * @return 组织列表
     */
    List<Map<String, Object>> selectOrgOptions();

    /**
     * 查询当前用户部落列表
     *
     * @return 部落列表
     */
    List<Map<String, Object>> selectTribeOptionsByUserId();

    /**
     * 判断用户是否在部落中
     *
     * @param userId  用户id
     * @param tribeId 部落id
     * @return 是否在部落中
     */
    boolean checkUserInTribe(Long userId, Long tribeId);

    /**
     * 查询部落列表
     *
     * @param tribeScreenDTO 筛选条件
     * @return 部落列表
     */
    List<Tribe> selectTribeListByScreen(TribeScreenDTO tribeScreenDTO);

    /**
     * 申请加入部落
     *
     * @param tribeId 部落id
     * @param userId  用户id
     * @return 结果
     */
    AjaxResult apply(Long tribeId, Long userId);

    /**
     * 查询部落下拉菜单选项
     *
     * @return 部落下拉菜单选项
     */
    List<Map<String, Object>> selectTribeListOptions();

    /**
     * 查询用户部落列表
     *
     * @param status 状态 {1: 已加入， 2：审核中}
     * @return 用户部落列表
     */
    List<TribeSimpleDTO> selectListByUser(Integer status);

    /**
     * 获取部落统计信息
     *
     * @return 饼图数据
     */
    TribeStatisticsDTO getStatistics();

    /**
     * 获取部落活动数据饼图数据
     *
     * @param type 类型
     * @return 饼图数据
     */
    List<PieChartDTO> getPie(String type);
}
